<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us">
<head>
  <link href="//gmpg.org/xfn/11" rel="profile">
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="generator" content="Hugo 0.68.3" />

  
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>uwsgi、wsgi和nginx的区别和关系 &middot; 我的博客</title>

  
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/print.css" media="print">
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/poole.css">
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/syntax.css">
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/hyde.css">
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Abril+Fatface|PT+Sans:400,400i,700">


  
  <link rel="apple-touch-icon-precomposed" sizes="144x144" href="/apple-touch-icon-144-precomposed.png">
  <link rel="shortcut icon" href="/favicon.png">

  
  
</head>

  <body class="theme-base-0b ">
  <aside class="sidebar">
  <div class="container sidebar-sticky">
    <div class="sidebar-about">
      <a href="/my_technology_blog/"><h1>我的博客</h1></a>
      <p class="lead">
       杨博的博客 
      </p>
    </div>

    <nav>
      <ul class="sidebar-nav">
        <li><a href="/my_technology_blog/">Home</a> </li>
        
      </ul>
    </nav>

    <p>&copy; 2021. All rights reserved. </p>
  </div>
</aside>

    <main class="content container">
    <div class="post">
  <h1>uwsgi、wsgi和nginx的区别和关系</h1>
  <time datetime=2020-06-28T15:13:21&#43;0800 class="post-date">Sun, Jun 28, 2020</time>
  <h2 id="区分uwsgi和wsgi">区分uWSGI和WSGI</h2>
<p>在python web开发中，我们经常使用uwsgi配合nginx部署一个web框架，如<code>Django</code>或<code>flask</code>。同时我们又会说，框架和web服务器之间要符合WSGI协议。那就来厘清一下这几个概念。</p>
<h3 id="web服务器和web框架">web服务器和web框架</h3>
<p>在讲uWSGI和WSGI之前，先要弄清楚web开发的两大块，<strong>web服务器和web框架</strong>。
<strong>web服务器</strong>即用来接受客户端请求，建立连接，转发响应的程序。至于转发的内容是什么，交由<strong>web框架</strong>来处理，即处理这些业务逻辑。如查询数据库、生成实时信息等。Nginx就是一个web服务器，<code>Django</code>或<code>flask</code>就是<strong>web框架</strong>。</p>
<h3 id="回到uwsgi和wsgi">回到uWSGI和WSGI。</h3>
<p>那么如何实现uWSGI和WSGI的配合呢？如何做到任意一个web服务器，都能搭配任意一个框架呢？这就产生了<strong>WSGI协议</strong>。只要web服务器和web框架满足WSGI协议，它们就能相互搭配。所以WSGI只是一个协议，一个约定。而不是python的模块、框架等具体的功能。</p>
<p>而<code>uWSGI</code>，则是实现了<strong>WSGI协议</strong>的一个<strong>web服务器</strong>。即用来接受客户端请求，转发响应的程序。实际上，一个<code>uWSGI</code>的web服务器，再加上<code>Django</code>这样的web框架，就已经可以实现网站的功能了。那为什么还需要Nginx呢？</p>
<h3 id="为什么需要nginx">为什么需要Nginx</h3>
<p>一个普通的个人网站，访问量不大的话，当然可以由<code>uWSGI</code>和<code>Django</code>构成。但是一旦访问量过大，客户端请求连接就要进行长时间的等待。这个时候就出来了分布式服务器，我们可以多来几台web服务器，都能处理请求。但是谁来分配客户端的请求连接和web服务器呢？Nginx就是这样一个管家的存在，由它来分配。这也就是由<strong>Nginx实现反向代理</strong>，即代理服务器。</p>
<p><img src="C:%5Cwww%5Chugo_blog%5Cpublic%5Cimg%5Cnginx.jpg" alt=""></p>

</div>


    </main>

    
  </body>
</html>
